/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Codigo;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author kyerte
 */
public class ConsultaProductos {

    private Connection conexion = null;
    private PreparedStatement consultaProductoCorretaje = null;
    private PreparedStatement consultaProductoDesarrollo = null;
    private PreparedStatement insertarProductoCorretaje = null;
    private PreparedStatement insertarProductoDesarrollo = null;
    private PreparedStatement actualizarProductoCorretaje = null;
    private PreparedStatement actualizarProductoDesarrollo = null;
    private PreparedStatement buscarProductoNombreCorretaje = null;
    private PreparedStatement buscarProductoColoniaCorretaje = null;
    private PreparedStatement buscarProductoNombreDesarrollo = null;
    private PreparedStatement buscarCorretajeTipo = null;
    private PreparedStatement buscarDesarrolloTipo = null;
    private PreparedStatement buscarProductoDesarrollo = null;
    private PreparedStatement eliminarProducto = null;
    private PreparedStatement obtenerIdProducto = null;
    private PreparedStatement venderInmobil = null;
    private boolean esDesarrollo = false;

    ConsultaProductos(boolean esDes) {
        esDesarrollo = esDes;
        conexion = FrmPrincipal.conexion;

        try {

            consultaProductoCorretaje = conexion.prepareStatement("SELECT * FROM "
                    + "Producto WHERE Desarrollo=false");
            consultaProductoDesarrollo = conexion.prepareStatement("SELECT Producto.idProducto, "
                    + "Desarrollos.Nombre, Producto.Nombre,  Producto.Tipo, "
                    + "Producto.Vendido, Producto.Desarrollo FROM Producto "
                    + "JOIN Desarrollos WHERE Producto.idDesarrollos = "
                    + "Desarrollos.idDesarrollos;");
            insertarProductoCorretaje = conexion.prepareStatement("INSERT INTO Producto "
                    + "(Nombre, Direccion, Colonia, Referencias, "
                    + "Tipo, Vendido, Desarrollo) VALUES(?,?,?,?,?,?,?)");
            insertarProductoDesarrollo = conexion.prepareStatement("INSERT INTO Producto "
                    + "(idDesarrollos, Nombre, Tipo, Vendido, Desarrollo) "
                    + "VALUES(?,?,?,?,?)");
            actualizarProductoCorretaje = conexion.prepareStatement("UPDATE Producto SET "
                    + "Nombre=?, Direccion=?, Colonia=?, Referencias=?, "
                    + "Tipo=?, Vendido=? WHERE idProducto=?");
            actualizarProductoDesarrollo = conexion.prepareStatement("UPDATE Producto SET "
                    + "idDesarrollos=?, Nombre=?, Tipo=?, Vendido=? WHERE idProducto=?");
            eliminarProducto = conexion.prepareStatement("DELETE FROM Producto "
                    + "WHERE idProducto=?");
            obtenerIdProducto = conexion.prepareStatement("SELECT idProducto FROM"
                    + " Producto WHERE Nombre=?");
            buscarProductoNombreDesarrollo = conexion.prepareStatement("SELECT "
                    + "Producto.idProducto, Desarrollos.Nombre, Producto.Nombre,  "
                    + "Producto.Tipo, Producto.Vendido, Producto.Desarrollo FROM "
                    + "Producto JOIN Desarrollos WHERE Producto.idDesarrollos = "
                    + "Desarrollos.idDesarrollos AND Producto.Nombre=?");
            buscarProductoDesarrollo = conexion.prepareStatement(" SELECT "
                    + "Producto.idProducto, Desarrollos.Nombre, Producto.Nombre,  "
                    + "Producto.Tipo, Producto.Vendido, Producto.Desarrollo FROM "
                    + "Producto JOIN Desarrollos WHERE Producto.idDesarrollos = "
                    + "Desarrollos.idDesarrollos AND Desarrollos.Nombre=?");
            buscarProductoNombreCorretaje = conexion.prepareStatement("SELECT * FROM Producto WHERE Nombre=?");
            buscarProductoColoniaCorretaje = conexion.prepareStatement("SELECT * FROM Producto WHERE Colonia=?");
            buscarCorretajeTipo = conexion.prepareStatement("SELECT * FROM Producto WHERE Desarrollo = false AND Tipo=?");
            buscarDesarrolloTipo = conexion.prepareStatement(" SELECT "
                    + "Producto.idProducto, Desarrollos.Nombre, Producto.Nombre,  "
                    + "Producto.Tipo, Producto.Vendido, Producto.Desarrollo FROM "
                    + "Producto JOIN Desarrollos WHERE Producto.idDesarrollos = "
                    + "Desarrollos.idDesarrollos AND Producto.Tipo=?");
            venderInmobil = conexion.prepareStatement("UPDATE Producto SET Vendido=? "
                    + "WHERE idProducto=?");

        } catch (SQLException ex) {
            ex.printStackTrace();
            close();
        }
    }

    public int obtenerIdUltimoRegistro() {
        int ultimoId = 0;
        ResultSet conjuntoResultados = null;
        try {
            Statement instruccion = conexion.createStatement();
            conjuntoResultados = instruccion.executeQuery("SELECT MAX(idProducto) "
                    + "AS id FROM Producto");

            while (conjuntoResultados.next()) {
                ultimoId = conjuntoResultados.getInt("id");
            }

        } catch (SQLException ex) {
            ex.printStackTrace();
            close();

        }

        return ultimoId;
    }

    public List<Corretaje> consultarProductosCorretaje() {
        ResultSet conjuntoResultados = null;
        List<Corretaje> resultadosProducto = null;

        try {

            conjuntoResultados = consultaProductoCorretaje.executeQuery();
            resultadosProducto = new ArrayList<Corretaje>();

            while (conjuntoResultados.next()) {

                resultadosProducto.add(new Corretaje(
                        conjuntoResultados.getInt("Producto.idProducto"),
                        conjuntoResultados.getString("Producto.Nombre"),
                        conjuntoResultados.getString("Producto.Direccion"),
                        conjuntoResultados.getString("Producto.Colonia"),
                        conjuntoResultados.getString("Producto.Referencias"),
                        conjuntoResultados.getString("Producto.Tipo"),
                        conjuntoResultados.getBoolean("Producto.Vendido"),
                        conjuntoResultados.getBoolean("Producto.Desarrollo")));
            }

        } catch (SQLException ex) {
            ex.printStackTrace();
        } finally {
            try {
                conjuntoResultados.close();
            } catch (SQLException ex) {
                ex.printStackTrace();
                close();
            }
        }
        return resultadosProducto;
    }

    public List<MobilDesarrollo> consultarProductosDesarrollo() {
        ResultSet conjuntoResultados = null;
        List<MobilDesarrollo> resultadosProducto = null;

        try {

            conjuntoResultados = consultaProductoDesarrollo.executeQuery();
            resultadosProducto = new ArrayList<MobilDesarrollo>();

            while (conjuntoResultados.next()) {
                resultadosProducto.add(new MobilDesarrollo(
                        conjuntoResultados.getInt("Producto.idProducto"),
                        conjuntoResultados.getString("Producto.Nombre"),
                        conjuntoResultados.getString("Desarrollos.Nombre"),
                        conjuntoResultados.getString("Producto.Tipo"),
                        conjuntoResultados.getBoolean("Producto.Vendido"),
                        conjuntoResultados.getBoolean("Producto.Desarrollo")));
            }

        } catch (SQLException ex) {
            ex.printStackTrace();
        } finally {
            try {
                conjuntoResultados.close();
            } catch (SQLException ex) {
                ex.printStackTrace();
                close();
            }
        }
        return resultadosProducto;
    }

    public int agregarNuevoCorretaje(String nomb, String dir, String col,
            String ref, String tip, boolean sold, boolean esDes) {

        int resultado = 0;

        try {

            insertarProductoCorretaje.setString(1, nomb);
            insertarProductoCorretaje.setString(2, dir);
            insertarProductoCorretaje.setString(3, col);
            insertarProductoCorretaje.setString(4, ref);
            insertarProductoCorretaje.setString(5, tip);
            insertarProductoCorretaje.setBoolean(6, sold);
            insertarProductoCorretaje.setBoolean(7, esDes);

            resultado = insertarProductoCorretaje.executeUpdate();
        } catch (SQLException ex) {
            ex.printStackTrace();
            close();
        }
        return resultado;
    }

    public int agregarNuevoDesarrollo(int idDesarrollo, String nombre, String tip,
            boolean sold, boolean esDes) {
        int resultado = 0;
        try {

            insertarProductoDesarrollo.setInt(1, idDesarrollo);
            insertarProductoDesarrollo.setString(2, nombre);
            insertarProductoDesarrollo.setString(3, tip);
            insertarProductoDesarrollo.setBoolean(4, sold);
            insertarProductoDesarrollo.setBoolean(5, esDes);

            resultado = insertarProductoDesarrollo.executeUpdate();
        } catch (SQLException ex) {
            ex.printStackTrace();
            close();
        }
        return resultado;
    }

    public int actualizarProducto(String nomb, String dir, String col,
            String ref, String tip, boolean sold, int id) {

        int resultado = 0;

        try {

            actualizarProductoCorretaje.setString(1, nomb);
            actualizarProductoCorretaje.setString(2, dir);
            actualizarProductoCorretaje.setString(3, col);
            actualizarProductoCorretaje.setString(4, ref);
            actualizarProductoCorretaje.setString(5, tip);
            actualizarProductoCorretaje.setBoolean(6, sold);
            actualizarProductoCorretaje.setInt(7, id);

            resultado = actualizarProductoCorretaje.executeUpdate();
        } catch (SQLException ex) {
            ex.printStackTrace();
            close();
        }
        return resultado;
    }

    public int actualizarProductoDesarrollo(int idDesarrollo, String nombre,
            String tip, boolean sold, int idProducto) {

        int resultado = 0;

        try {

            actualizarProductoDesarrollo.setInt(1, idDesarrollo);
            actualizarProductoDesarrollo.setString(2, nombre);
            actualizarProductoDesarrollo.setString(3, tip);
            actualizarProductoDesarrollo.setBoolean(4, sold);
            actualizarProductoDesarrollo.setInt(5, idProducto);

            resultado = actualizarProductoDesarrollo.executeUpdate();
        } catch (SQLException ex) {
            ex.printStackTrace();
            close();
        }

        return resultado;
    }

    public int venderInmobil(int id, boolean vendido) {
        int resultado = 0;
        try {
            venderInmobil.setBoolean(1, vendido);
            venderInmobil.setInt(2, id);
            resultado = venderInmobil.executeUpdate();
        } catch (SQLException ex) {
            ex.printStackTrace();
        }

        return resultado;
    }

    public int eliminarProducto(int id) {

        int resultado = 0;

        try {

            eliminarProducto.setInt(1, id);
            resultado = eliminarProducto.executeUpdate();

        } catch (SQLException ex) {
            ex.printStackTrace();
            close();
        }
        return resultado;
    }

    public int obtenerIdProducto(String nombre) {
        ResultSet conjuntoResultados = null;
        int idProd = 0;

        try {

            obtenerIdProducto.setString(1, nombre);

            conjuntoResultados = obtenerIdProducto.executeQuery();

            while (conjuntoResultados.next()) {
                idProd = conjuntoResultados.getInt("idProducto");
            }

        } catch (SQLException ex) {
            ex.printStackTrace();
        } finally {
            try {

                conjuntoResultados.close();

            } catch (SQLException ex) {
                ex.printStackTrace();
                close();
            }
        }
        return idProd;
    }

    public List<MobilDesarrollo> buscarProductoNombreDesarrollo(String nombre) {
        ResultSet conjuntoResultados = null;
        List<MobilDesarrollo> resultadosProducto = null;

        try {

            buscarProductoNombreDesarrollo.setString(1, nombre);
            conjuntoResultados = buscarProductoNombreDesarrollo.executeQuery();
            resultadosProducto = new ArrayList<MobilDesarrollo>();

            while (conjuntoResultados.next()) {
                resultadosProducto.add(new MobilDesarrollo(
                        conjuntoResultados.getInt("Producto.idProducto"),
                        conjuntoResultados.getString("Producto.Nombre"),
                        conjuntoResultados.getString("Desarrollos.Nombre"),
                        conjuntoResultados.getString("Producto.Tipo"),
                        conjuntoResultados.getBoolean("Producto.Vendido"),
                        conjuntoResultados.getBoolean("Producto.Desarrollo")));
            }

        } catch (SQLException ex) {
            ex.printStackTrace();
        } finally {
            try {
                conjuntoResultados.close();
            } catch (SQLException ex) {
                ex.printStackTrace();
                close();
            }
        }
        return resultadosProducto;
    }

    public List<MobilDesarrollo> buscarDesarrolloTipo(String tipo) {
        ResultSet conjuntoResultados = null;
        List<MobilDesarrollo> resultadosProducto = null;

        try {

            buscarDesarrolloTipo.setString(1, tipo);
            conjuntoResultados = buscarDesarrolloTipo.executeQuery();
            resultadosProducto = new ArrayList<MobilDesarrollo>();

            while (conjuntoResultados.next()) {
                resultadosProducto.add(new MobilDesarrollo(
                        conjuntoResultados.getInt("Producto.idProducto"),
                        conjuntoResultados.getString("Producto.Nombre"),
                        conjuntoResultados.getString("Desarrollos.Nombre"),
                        conjuntoResultados.getString("Producto.Tipo"),
                        conjuntoResultados.getBoolean("Producto.Vendido"),
                        conjuntoResultados.getBoolean("Producto.Desarrollo")));
            }

        } catch (SQLException ex) {
            ex.printStackTrace();
        } finally {
            try {
                conjuntoResultados.close();
            } catch (SQLException ex) {
                ex.printStackTrace();
                close();
            }
        }
        return resultadosProducto;
    }

    public List<MobilDesarrollo> buscarProductoDesarrollo(String desarrollo) {
        ResultSet conjuntoResultados = null;
        List<MobilDesarrollo> resultadosProducto = null;

        try {
            buscarProductoDesarrollo.setString(1, desarrollo);
            conjuntoResultados = buscarProductoDesarrollo.executeQuery();
            resultadosProducto = new ArrayList<MobilDesarrollo>();

            while (conjuntoResultados.next()) {
                resultadosProducto.add(new MobilDesarrollo(
                        conjuntoResultados.getInt("Producto.idProducto"),
                        conjuntoResultados.getString("Producto.Nombre"),
                        conjuntoResultados.getString("Desarrollos.Nombre"),
                        conjuntoResultados.getString("Producto.Tipo"),
                        conjuntoResultados.getBoolean("Producto.Vendido"),
                        conjuntoResultados.getBoolean("Producto.Desarrollo")));
            }

        } catch (SQLException ex) {
            ex.printStackTrace();
        } finally {
            try {
                conjuntoResultados.close();
            } catch (SQLException ex) {
                ex.printStackTrace();
                close();
            }
        }
        return resultadosProducto;
    }

    public List<Corretaje> buscarProductoNombreCorretaje(String nombre) {
        ResultSet conjuntoResultados = null;
        List<Corretaje> resultadosProducto = null;

        try {
            buscarProductoNombreCorretaje.setString(1, nombre);
            conjuntoResultados = buscarProductoNombreCorretaje.executeQuery();
            resultadosProducto = new ArrayList<Corretaje>();

            while (conjuntoResultados.next()) {

                resultadosProducto.add(new Corretaje(
                        conjuntoResultados.getInt("Producto.idProducto"),
                        conjuntoResultados.getString("Producto.Nombre"),
                        conjuntoResultados.getString("Producto.Direccion"),
                        conjuntoResultados.getString("Producto.Colonia"),
                        conjuntoResultados.getString("Producto.Referencias"),
                        conjuntoResultados.getString("Producto.Tipo"),
                        conjuntoResultados.getBoolean("Producto.Vendido"),
                        conjuntoResultados.getBoolean("Producto.Desarrollo")));
            }

        } catch (SQLException ex) {
            ex.printStackTrace();
        } finally {
            try {
                conjuntoResultados.close();
            } catch (SQLException ex) {
                ex.printStackTrace();
                close();
            }
        }
        return resultadosProducto;
    }

    public List<Corretaje> buscarCorretajeTipo(String tipo) {
        ResultSet conjuntoResultados = null;
        List<Corretaje> resultadosProducto = null;

        try {
            buscarCorretajeTipo.setString(1, tipo);
            conjuntoResultados = buscarCorretajeTipo.executeQuery();
            resultadosProducto = new ArrayList<Corretaje>();

            while (conjuntoResultados.next()) {

                resultadosProducto.add(new Corretaje(
                        conjuntoResultados.getInt("Producto.idProducto"),
                        conjuntoResultados.getString("Producto.Nombre"),
                        conjuntoResultados.getString("Producto.Direccion"),
                        conjuntoResultados.getString("Producto.Colonia"),
                        conjuntoResultados.getString("Producto.Referencias"),
                        conjuntoResultados.getString("Producto.Tipo"),
                        conjuntoResultados.getBoolean("Producto.Vendido"),
                        conjuntoResultados.getBoolean("Producto.Desarrollo")));
            }

        } catch (SQLException ex) {
            ex.printStackTrace();
        } finally {
            try {
                conjuntoResultados.close();
            } catch (SQLException ex) {
                ex.printStackTrace();
                close();
            }
        }
        return resultadosProducto;
    }

    public List<Corretaje> buscarProductoColoniaCorretaje(String colonia) {
        ResultSet conjuntoResultados = null;
        List<Corretaje> resultadosProducto = null;

        try {
            buscarProductoColoniaCorretaje.setString(1, colonia);
            conjuntoResultados = buscarProductoColoniaCorretaje.executeQuery();
            resultadosProducto = new ArrayList<Corretaje>();

            while (conjuntoResultados.next()) {

                resultadosProducto.add(new Corretaje(
                        conjuntoResultados.getInt("Producto.idProducto"),
                        conjuntoResultados.getString("Producto.Nombre"),
                        conjuntoResultados.getString("Producto.Direccion"),
                        conjuntoResultados.getString("Producto.Colonia"),
                        conjuntoResultados.getString("Producto.Referencias"),
                        conjuntoResultados.getString("Producto.Tipo"),
                        conjuntoResultados.getBoolean("Producto.Vendido"),
                        conjuntoResultados.getBoolean("Producto.Desarrollo")));
            }

        } catch (SQLException ex) {
            ex.printStackTrace();
        } finally {
            try {
                conjuntoResultados.close();
            } catch (SQLException ex) {
                ex.printStackTrace();
                close();
            }
        }
        return resultadosProducto;
    }

    private void close() {
        try {
            conexion.close();
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
    }
}
